// 必须对外暴露一个方法,而且得返回一个promise对象
const BASE_URL = 'https://www.uinav.com'

function request({
	url,
	method = 'GET',
	isAuth,
	data = {},
}) {
	return new Promise((resolve, reject) => {

		// 默认header是空对象,用户无须登陆态,header可以传空对象
		let header = {}

		// 需要登陆态
		if (isAuth) {
			let token = uni.getStorageSync('token')
			// 如果没有token,跳转login
			if (!token) {
				uni.navigateTo({
					url: '/pages/login/login'
				})
				return reject(new Error('请先登录'))
			}
			// 如果需要登陆态,就传递token,否则就不传
			header.Authorization = token
		}

		// 请求前,开启Loading
		uni.showLoading({
			title: '加载中...',
			mask: true
		});
		
		uni.request({
			url: BASE_URL + url,
			method,
			// header:header,
			header,
			data,
			success: res => {
				// 解构返回的数据
				let {
					meta,
					message
				} = res.data
				if (meta.status === 200) {
					// 如果meta.status===200,才表示数据是正确
					resolve(message)
				}else{
					uni.showModal({
						content:meta.msg,
						showCancel:false
					})
					reject(meta.msg)
				}
			},
			fail() {
				// 一般是网络错误
				uni.showModal({
					content:'网络错误请重试',
					showCancel:false
				})
				reject(new Error('网络错误请重试'))
			},
			complete() {
				// 请求结束后关闭Loading
				uni.hideLoading()
			}
		});
	})
}

export default request
